package com.xiaoshuidi.cloud.module.rooms.repository;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xiaoshuidi.cloud.module.rooms.controller.admin.roomentrust.vo.RoomEntrustPageReqVO;
import com.xiaoshuidi.cloud.module.rooms.enums.RoomEntrustStatusEnum;
import com.xiaoshuidi.cloud.module.rooms.mapper.RoomEntrustMapper;
import com.xiaoshuidi.cloud.module.rooms.pojo.RoomEntrust;
import com.xiaoshuidi.cloud.module.rooms.utils.TimeConvertUtils;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository;

@Repository
@RequiredArgsConstructor
public class RoomEntrustRepository extends ServiceImpl<RoomEntrustMapper, RoomEntrust> {
    public Page<RoomEntrust> roomEntrustPage(RoomEntrustPageReqVO vo) {
        Page<RoomEntrust> page = Page.of(vo.getPageNo(), vo.getPageSize());
        QueryWrapper<RoomEntrust> wrapper = new QueryWrapper<>();
        if (StringUtils.isNotEmpty(vo.getStatus()) && vo.getStatus().equals("9")) {
            wrapper.in("status", RoomEntrustStatusEnum.FOLLOWING.getCode(),
                    RoomEntrustStatusEnum.PHONED.getCode(),
                    RoomEntrustStatusEnum.REVIEWED.getCode(),
                    RoomEntrustStatusEnum.POSTPONED.getCode());
        } else if (StringUtils.isNotEmpty(vo.getStatus()) && vo.getStatus().equals("10")) {
            wrapper.in("status", RoomEntrustStatusEnum.FINISHED.getCode(),
                    RoomEntrustStatusEnum.SIGNING.getCode(),
                    RoomEntrustStatusEnum.INVALID.getCode(),
                    RoomEntrustStatusEnum.GIVEUP.getCode());
        } else {
            wrapper.eq("status", vo.getStatus());
        }

        if (StringUtils.isNotEmpty(vo.getSource())) {
            wrapper.eq("source", vo.getSource());
        }
        if (ObjectUtils.isNotEmpty(vo.getBeginDate())) {
            wrapper.ge("create_time", TimeConvertUtils.startTimeConvert(vo.getBeginDate()));
        }
        if (ObjectUtils.isNotEmpty(vo.getEndDate())) {
            wrapper.le("create_time", TimeConvertUtils.endTimeConvert(vo.getEndDate()));
        }
        if (StringUtils.isNotEmpty(vo.getKeyWord())) {
            wrapper.and(s -> s.like("phone", vo.getKeyWord()).or().like("name", vo.getKeyWord())
                    .or().like("area", vo.getKeyWord()));
        }
        return this.page(page, wrapper);
    }
}
